import LinkedList from "../LinkedList";

export default class Queue<T> extends LinkedList<T> {
    constructor() {
        super()
    }

    size(): number {
        return super.length()
    }

    /**
     * 向队列添加元素
     * @param value 加入队列的元素
     */
    push(value: T): void {
        super.add(value)
    }

    /**
     * 从队尾移除元素
     * @returns 队尾元素
     */
    pop(): T | undefined {
        return super.removeFirst()
    }

    /**
     * 返回队列最前方的元素
     * @returns 队列最前方的元素
     */
    front(): T | undefined {
        return super.getLast()
    }

    /**
     * 返回队列最后方的元素
     * @returns 队列最后方的元素
     */
    protected back(): T | undefined {
        return super.getFirst()
    }
}